package com.qf.day12.linkedList;

import java.util.LinkedList;

/**
 * 练习：
 * 给定一个包含小括号的字符串，例如"1+((a+b)/c)+5/(2+a)",请写一个方法判断该字符串中的小括号是否成对出现。
 */
public class StackDemo02 {

    public static void main(String[] args) {
        String s = "1+((a+b)/c)+5/(2+a)aaa)";

        boolean flag = testXkh(s);
        System.out.println(flag);
    }

    /**
     * 利用栈来实现小括号是否成对出现
     * 看栈中最后是否还有剩余元素，如果没有，则证明是成对出现的
     * @param s
     * @return
     */
    private static boolean testXkh(String s) {

        //1. 创建栈对象
        LinkedList<Character> stack = new LinkedList<>();

        //2. 将s转换为char数组
        char[] charArray = s.toCharArray();
        for (int i = 0; i < charArray.length; i++) {
            if (charArray[i]=='(') {
                // 入栈
                stack.push(charArray[i]);
            }else if (charArray[i]==')'){
                // 出栈
                try {
                    stack.pop();
                } catch (Exception e) {
                    // 出异常，意味着小括号已经不匹配了
                    return false;
                }
            }
        }

        return stack.size()==0;
    }

}
